с помощью библиотеки Cilk, установив Intel Parallel X Studio

Я установил студию Intel, и у меня есть Visual Studio 2013, я хочу написать программу, которая использует потоки. Я хочу скомпилировать его Intel, я сделал следующие шаги:

  1. Я создаю пустой проект
  2. Я щелкнул правой кнопкой мыши источник cpp и выбрал компилятор Intel, затем выбрал Intel C++ для выбранного файла и, выбрав «Все конфигурации», нажал кнопку «ОК».
  3. затем я щелкаю правой кнопкой мыши по проекту и из элемента компилятора Intel я выбираю с помощью Intel С++.
  4. чтобы убедиться, что я захожу в диспетчер свойств и проверяю диспетчер конфигурации, платформа должна быть X64. Более того, я вижу в c/c++, оптимизации [Intel C++] или вообще [Intel C++].

Итак, я думаю, что все настройки сделаны правильно. Но у меня возникают эти ошибки, когда я пишу код с использованием Cilk/cilk.h.

введите здесь описание изображения

и это код

#include <stdio.h>
#include <windows.h>
#include <mmsystem.h>
#include <math.h>
#include <cilk/cilk.h>

using namespace std;

const long int VERYBIG = 100000;
// ***********************************************************************
int main(void)
{
    int i;
    long int j, k, sum;
    double sumx, sumy, total;
    DWORD starttime, elapsedtime;
    // -----------------------------------------------------------------------
    // Output a start message
    printf("****************None Parallel Timings for %d iterations\n\n", VERYBIG);
    // repeat experiment several times
    //  int i = 0;
    cilk_for(int i = 0; i < 6; i++)
    {
        // get
        starttime = timeGetTime();
        // reset check sum & running total
        sum = 0;
        total = 0.0;
        // Work Loop, do some work by looping VERYBIG times
        cilk_for(int j = 0; j<VERYBIG; j++)
        {
            // increment check sum
            sum += 1;
            // Calculate first arithmetic series
            sumx = 0.0;
            for (k = 0; k<j; k++)
                sumx = sumx + (double)k;
            // Calculate second arithmetic series
            sumy = 0.0;
            for (k = j; k>0; k--)
                sumy = sumy + (double)k;
            if (sumx > 0.0)total = total + 1.0 / sqrt(sumx);
            if (sumy > 0.0)total = total + 1.0 / sqrt(sumy);
        }
        // get ending time and use it to determine elapsed time
        elapsedtime = timeGetTime() - starttime;
        // report elapsed time
        printf("Time Elapsed % 10d mSecs Total = %lf Check Sum = %ld\n",
            (int)elapsedtime, total, sum);
    }
    // return integer as required by function header
    return 0;
}
// **********************************************************************

Должен сказать, что я пытаюсь использовать _Cilk_for вместо cilk_for, но проблема не решается.

Может ли кто-нибудь сказать мне, в чем проблема?


person Nastaran Hakimi    schedule 22.05.2015    source источник


Ответы (1)


Для функции __imp_timeGetTime, на которую ссылается ...cilk_for..., вам необходимо связать winmm.lib (см., например, https://www.gamedev.net/topic/109957-unresolved-external-symbol-__imp__timegettime0/ или https://groups.google.com/forum/#!topic/v8-users/WsJYEcp_siY)

person codeling    schedule 22.05.2015
comment
да, я должен добавить эту библиотеку, это был новый проект, который я забыл добавить, но проблема не связана с winmm, lib это для использования времени - person Nastaran Hakimi; 22.05.2015
comment
проблема, которую вы показываете (ошибка компоновщика), связана с winmm.lib. и я не вижу никакой другой проблемы, описанной в вашем вопросе...? - person codeling; 22.05.2015
comment
так что cilk_for не является неопределенной ошибкой? - person Nastaran Hakimi; 22.05.2015
comment
нет; ...cilk_for... - это как раз то место, где есть ссылка на функцию __imp_timeGetTime. - person codeling; 22.05.2015