Я - программист-любитель C #, который забрел на C ++ из-за необходимости в технологии C ++ AMP для некоторого сложного перебора чисел. Следовательно, мои навыки программирования на C ++ не очень хорошо развиты.
Для моей первой попытки использования реальной программы я выбрал код, основанный на статье Даниэля Мота за апрель 2012 года . Я не могу заставить его строить. Я всегда получаю ошибку:
C2871 «Параллельность»: пространство имен с таким именем не существует.
Я знаю, что код был впервые написан для Visual Studio 11, но на моей машине были только VS 2008 и VS 2010. Итак, я установил VS 2017 (версия 15.9.4, .Net 4.7.03062). Я начал с пустого проекта C ++, но у меня были проблемы с ним. Лучшее, что я мог сделать после того, как проработал все то, что он не распознал, это ошибка:
C3861: идентификатор «доступа» не найден, строка 2616 в файле «amp.h».
Итак, я начал снова, на этот раз с пустым проектом консольного приложения Windows. Опять же, мне пришлось значительно доработать код для перехода с Visual Studio 11 на VS 2017, но в итоге получился код, показанный ниже.
Я пытался как мог найти источник ошибки. Я нацелился как на x64, так и на x86, но это не имело значения. Я закомментировал строку 5 и строки 21 - 27, и код будет собираться и выполняться. IntelliSense не показал никаких проблем ни с идентификаторами, ни с синтаксисом. Фактически, информация о наведении мыши распознала конструкции Concurrency
как таковые. Я намеренно ошибся Concurrency
, но IntelliSense сразу понял это. Я просмотрел свойства проекта, ориентируясь на настройку, которую нужно было изменить для запуска AMP, но поскольку я даже не был уверен, что искал, я ничего не нашел.
Я попытался найти имя файла, в котором определен Concurrency
, чтобы я мог найти свою машину, чтобы увидеть, была ли она там, и добавить путь, если он был, но безуспешно. Я даже не мог найти имя файла. Я гуглил и просматривал онлайн-источники и MS Docs, но, как бы я ни сформулировал свои поисковые вопросы, я не нашел никаких ответов.
Ошибка говорит:
Параллелизма не существует
что для меня означает, что он не может его найти, его нет на машине, или некоторые настройки сборки мешают его использованию. Большинство онлайновых статей о написании кода AMP ничего не говорят о настройках сборки. Разве это не требует ничего отличного от серийно закодированного проекта? Это так же просто, как отсутствующая ссылка? Если так, куда я могу пойти, чтобы найти это? С моим ограниченным опытом я не знаю, что еще попробовать.
Моя машина - это Win 7 SP1. Исправлена ошибка KB2999226 . Я не установил все VS 2017, так как меня интересуют только C # и C ++. Я не смог установить то, что должен был иметь?
Если бы эта проблема была решена раньше, я не смог бы ее найти. Таким образом, любая помощь будет оценена.
1. #include <amp.h>
2. #include "pch.h"
3. #include <iostream>
4. #include <vector>
5. using namespace Concurrency;
6.
7. int main() {
8. const int M = 1024; const int N = 1024; //row, col for vector
9. std::vector<int> vA(M*N); std::vector<int> vB(M*N); //vectors to add
10. std::vector<int> vC(M*N); //vector for result
11.
12. for (int i = 0; i < M; i++) { vA[i] = i; } //populate vectors
13. for (int j = N - 1; j >= 0; j--) { vB[j] = j; }
14.
15. for (int i = 0; i < M; i++) { //serial version of
16. for (int j = 0; j < N; j++) { //matrix addition
17. vC[i*N + j] = vA[i*N + j] + vB[i*N + j]; //using vectors
18. }
19. }
20.
21. extent<2> e(M, N); //uses AMP constructs but no
22. array_view<int, 2> a(e, vA), b(e, vB); //parallel functions invoked
23. array_view<int, 2> c(e, vC);
24. index<2> idx(0, 0);
25. for (idx[0] = 0; idx[0] < e[0]; idx[0]++) {
26. for (idx[1] = 0; idx[1] < e[1]; idx[1]++) {
27. c[idx] = a[idx] + b[idx];
28. }
29. }
30. // C2871 'Concurrency': a namespace with this name does not exist. Line 5
31. // Also C2065, C3861, C2062 for all Concurrency objects Line 21 - Line 27
32. }
33.