小编Ath*_*bey的帖子

致命错误:opencv2/opencv_modules.hpp:没有那个文件或目录#include "opencv2/opencv_modules.hpp"

大家好,我正在尝试使用我从源代码构建的 opencv-c++ API(版本 4.4.0)。它安装在 /usr/local/ 中,我只是尝试使用以下代码加载和显示图像 -

#include <iostream>
#include <opencv4/opencv2/opencv.hpp>
#include <opencv4/opencv2/core.hpp>
#include <opencv4/opencv2/imgcodecs.hpp>
#include <opencv4/opencv2/highgui.hpp>
#include <opencv4/opencv2/core/cuda.hpp>

using namespace cv;

int main()
{
    std::string image_path = "13.jpg";
    cv::Mat img = cv::imreadmulti(image_path, IMREAD_COLOR);
    if(img.empty())
    {
        std::cout<<"COULD NOT READ IMAGE"<<std::endl;
        return 1;
    }
    imshow("Display Window", img);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译时,它会在编译过程中引发以下错误 -

In file included from /CLionProjects/opencvTest/main.cpp:2:
/usr/local/include/opencv4/opencv2/opencv.hpp:48:10: fatal error: opencv2/opencv_modules.hpp: No such file or directory
 #include "opencv2/opencv_modules.hpp"
Run Code Online (Sandbox Code Playgroud)

我的 Cmake 如下 -

cmake_minimum_required(VERSION 3.15)
project(opencvTest)

set(CMAKE_CXX_STANDARD 17)
include_directories("/usr/local/include/opencv4/opencv2/")
add_executable(opencvTest main.cpp)
target_link_libraries(opencvTest …
Run Code Online (Sandbox Code Playgroud)

c++ opencv opencv4

6
推荐指数
1
解决办法
2万
查看次数

为什么 printf() 在内核中可以工作,但使用 std::cout 却不能?

我一直在探索并行编程领域,并用 Cuda 和 SYCL 编写了基本内核。我遇到过一种情况,我必须在内核内部打印,我注意到std::cout内核内部不起作用,而实际上却起作用printf。例如,考虑以下 SYCL 代码 - 这有效 -

void print(float*A, size_t N){
    buffer<float, 1> Buffer{A, {N}};
    queue Queue((intel_selector()));
    Queue.submit([&Buffer, N](handler& Handler){
       auto accessor = Buffer.get_access<access::mode::read>(Handler);
       Handler.parallel_for<dummyClass>(range<1>{N}, [accessor](id<1>idx){
           printf("%f", accessor[idx[0]]);
       });
    });
}
Run Code Online (Sandbox Code Playgroud)

printf而如果我用它替换std::cout<<accessor[idx[0]]它会引发编译时错误,并提示 - Accessing non-const global variable is not allowed within SYCL device code. CUDA 内核也会发生类似的情况。这让我思考,两者之间可能存在什么差异printf,以及std::coout是什么导致了这种行为。

另外假设如果我想实现一个从GPU调用的自定义打印函数,我应该怎么做?
TIA

printf cuda cout sycl

2
推荐指数
1
解决办法
1655
查看次数

值是按引用还是按值存储在 std::pair&lt;&gt; 中?

所以我有一个类myClass和两个私有变量,假设 i,j 和一个类方法myMethod如下-

std::pair<int, int > myClass::myMethod(void)
{
    std::pair<int, int> Pair;
    this->i = 100;
    this->j = 50;
    Pair.first = this->i;
    Pair.second = this->j;
    return Pair;
}
Run Code Online (Sandbox Code Playgroud)

我从另一个函数调用该方法如下 -

std::pair<int, int> receivedPair = myClass.myMethod();
Run Code Online (Sandbox Code Playgroud)

所以如果我编辑receivedPair让我们说

receivedPair.first = 200;
Run Code Online (Sandbox Code Playgroud)

Class 变量i也会变成等于 200 吗?我基本上需要通过引用串联的几个函数来传递变量,以便更新相同的内存位置...... TIA

c++ std-pair c++17

1
推荐指数
1
解决办法
212
查看次数

OpenMP 向量化代码运行速度比 O3 优化代码慢

我有一个可重现的样本,如下所示 -

#include <iostream>
#include <chrono>
#include <immintrin.h>
#include <vector>
#include <numeric>



template<typename type>
void AddMatrixOpenMP(type* matA, type* matB, type* result, size_t size){
        for(size_t i=0; i < size * size; i++){
            result[i] = matA[i] + matB[i];
        }
}


int main(){
    size_t size = 8192;

    //std::cout<<sizeof(double) * 8<<std::endl;
    

    auto matA = (float*) aligned_alloc(sizeof(float), size * size * sizeof(float));
    auto matB = (float*) aligned_alloc(sizeof(float), size * size * sizeof(float));
    auto result = (float*) aligned_alloc(sizeof(float), size * size * sizeof(float));


    for(int i = …
Run Code Online (Sandbox Code Playgroud)

c++ gcc simd vectorization openmp

1
推荐指数
1
解决办法
91
查看次数

内在向量与朴素向量约简结果的差异

我一直在比较 Intrinsics 向量缩减、朴素向量缩减和使用 openmp 编译指示的向量缩减的运行时间。然而,我发现这些场景的结果是不同的。代码如下 - (内在向量归约取自 - Fastest way to dohorizo​​ntal SSE vector sum(或其他归约)

#include <iostream>
#include <chrono>
#include <vector>
#include <numeric>
#include <algorithm>
#include <immintrin.h>


inline float hsum_ps_sse3(__m128 v) {
    __m128 shuf = _mm_movehdup_ps(v);        // broadcast elements 3,1 to 2,0
    __m128 sums = _mm_add_ps(v, shuf);
    shuf        = _mm_movehl_ps(shuf, sums); // high half -> low half
    sums        = _mm_add_ss(sums, shuf);
    return        _mm_cvtss_f32(sums);
}


float hsum256_ps_avx(__m256 v) {
    __m128 vlow  = _mm256_castps256_ps128(v);
    __m128 vhigh = _mm256_extractf128_ps(v, 1); // high …
Run Code Online (Sandbox Code Playgroud)

c++ vector simd intrinsics ieee-754

1
推荐指数
1
解决办法
122
查看次数

标签 统计

c++ ×4

simd ×2

c++17 ×1

cout ×1

cuda ×1

gcc ×1

ieee-754 ×1

intrinsics ×1

opencv ×1

opencv4 ×1

openmp ×1

printf ×1

std-pair ×1

sycl ×1

vector ×1

vectorization ×1